PS 2011 - Laboratorio OS161

Il Sistema SIS161 – OS161 è installato, presso il LABINF, in una macchina virtuale VBOX OSE, con S.O. Linux Ubuntu.

Per attivare la macchina virtuale, eseguire i passi sotto-elencati

 

1)      Login sotto Fedora.  

2)      Verificare che nella directory /var/tmp sia presente il file "pso_linux_os161.vdi". In caso positivo passare direttamente al punto 5.

3)      Aprire la share di rete "materiale dei corsi" dall'icona presente sul desktop, oppure digitando la stringa "smb://cclix1/corsi" in una qualsiasi finestra del file manager.

4)      Copiare il file "pso_linux_os161.vdi" presente nella directory "PSO" nella directoy locale "/var/tmp" del computer in uso. Il trasferimento dura alcuni minuti.

5)      Avviare Sun Virtual Box dal menu Applications->System Tools.

6)       Creare una nuova macchina virtuale di tipo linux, usando il file "/var/tmp/pso_linux_os161.vdi" come disco virtuale esistente.

7)       Modificare le impostazioni della nuova macchina virtuale in modo che risulti come nello screenshot "impostazioni.png" presente sempre nella directory PSO della share dei corsi.

8)       Avviare la macchina virtuale.

9)      E’ abilitato automaticamente il login con

·         USER: pso

·         PASSWORD: pso

 

Ambiente OS161

 

Il sistema operativo os161 è stato pre-installato nel direttorio os161/os161-base-1.99.05, mentre i pacchetti SW richiesti, binutils, compilatore gcc e debugger gdb, emulatore MIPS, sono installati nella cartella os161/tools.

Si ricorda che il sistema OS161 è attivato sull’emulatore di processore MIPS, SYS161. Al fine di ri-compilare OS161, nonché di fare debug e altre operazioni (ad esempio visualizzazione di file eseguibili), sono necessari programmi previsti per la piattaforma MIPS, che sono stati installati con il prefisso “mips-harvard-os161-“: mips-harvard-os161-gcc, mips-harvard-os161-gdb (eseguibili in /home/pso/ os161/tools/bin).

Il sito web di riferimento è: http://www.eecs.harvard.edu/~syrah/os161/. L’ultima versione è disponibile su http://www.eecs.harvard.edu/~dholland/os161

Un altro sito con informazioni interessanti è quello del corso cs350 dell’università di Waterloo (Canada): http://www.student.cs.uwaterloo.ca/~cs350/common/OS161main.html

Sul desktop della macchina virtuale è presente un link al codice sorgente “navigabile” da un web browser. L’installazione proposta per pso si trova nella cartella /home/pso/os161. Per eventuali installazioni sul proprio PC, occorre seguire le istruzioni presenti su uno dei siti sopra proposti.

Informazioni dettagliate su avvio ed esecuzione di OS161 sono raggiungibili, ad esempio, dal link: “Information about building, running, and debugging OS/161 kernels.

La cartella iniziale di lavoro proposta è /home/pso/pso-os161/root

Per fare bootstrap di OS161 in ambiente emulato sys161 (da una shell, attivabile mediante applications->accessories->terminal), sono possibili due modalità:

·         Esecuzione normale:

cd /home/pso/pso-os161/root
sys161 kernel


Compare una videata come la seguente

sys161: System/161 release 1.99.04, compiled Mar 28 2009 21:03:10

OS/161 base system version 1.99.05

Copyright (c) 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009

   President and Fellows of Harvard College.  All rights reserved.

 

Put-your-group-name-here's system version 0 (ASST0 #1)

 

Cpu is MIPS r2000/r3000

336k physical memory available

Device probe...

lamebus0 (system main bus)

emu0 at lamebus0

ltrace0 at lamebus0

ltimer0 at lamebus0

hardclock on ltimer0 (100 hz)

beep0 at ltimer0

rtclock0 at ltimer0

lrandom0 at lamebus0

random0 at lrandom0

lhd0 at lamebus0

lhd1 at lamebus0

lser0 at lamebus0

con0 at lser0

pseudorand0 (virtual)

 

OS/161 kernel [? for menu]:

Dalla quale sono attivabili comandi (menu con ?). Alcuni comandi (es. quelli selezionabili con ?o) non sono completamente disponibili, in quanto OS161 non è un sistema completo (richiede aggiunte da parte dello studente).

·         Esecuzione con debugger. Occorre evitare di fare il debug dell’emulatore SYS161. Il debugger (per la piattaforma MIPS) deve quindi essere eseguito una volta avviato SYS161. A tale scopo occorrono due processi, uno per eseguire sys161 e uno per mips-harvard-os161-gdb, comunicanti mediante socket. Si consiglia di attivare due finestre terminale. Sulla prima, dal direttorio /home/pso/pso-os161/root eseguire il comando:

sys161 -w kernel

sulla seconda, dallo stesso direttorio

mips-harvard-os161-gdb kernel
(gdb) dir ../../os161/os161-base-1.99.05/kern/compile/ASST0
(gdb) target remote unix:.sockets/gdb

attenzione ad utilizzare lo stesso kernel. Se, dopo aver ricompilato altri kernel (es. kernel-ASST0, kernel-ASST1, …) si utilizzarà uno di questi, va usato lo stesso nelle due finestre.

        Per eventuale esecuzione di gdb con interfaccia a finestre, sono disponibili ddd (comando ddd-debugger  mips-harvard-os161-gdb), oppure l’editor emacs, da cui è possibile attivare una finestra di debugger.

Modificare il kernel

 

Sono previsti fino a 5 lavori (assignments), denominati ASSTx (0,1,2,3,4). Si consiglia di iniziare lavorando su assignment 0. Il primo lavoro consiste nell’inserire un messaggio aggiuntivo su video al bootstrap. Per fare questo, si chiede di aggiungere un file hello.c nel direttorio kern/main, nel quale scrivere una funzione hello(), che scrive un messaggio su video utilizzando la funzione kprintf.

Si riportano qui le istruzioni dettagliate

Creare un file kern/startup/hello.c

Scrivere nel file appena creato una funzione hello che utilizza kprintf() per scrivere un messaggio a video.

Modificare kern/startup/main.c inserendo una chiamata a hello()

Modificare kern/conf/conf.kern inserendo il nuovo file hello.c. nell’elenco dei file. Ad esempio

#

# Main/toplevel stuff

#

 

file      startup/main.c

file      startup/menu.c

file      startup/hello.c

Riconfigurare e ricompilare il sistema

In kern/conf dare il commando

./config ASST0

In kern/compile/ASST0 effettuare

bmake depend

bmake

bmake install

 

Provare a eseguire os161 per verificare che al bootstrap sia stampato il messaggio.

Programmazione concorrente con OS161 (ASST1)

 

Built-in thread tests

Quando si avvia os161, tra le opzioni disponibili dal menu, si possono avviare i test per thread. Si tratta fi funzioni NON caricate come eseguibili separati, ma direttamente likati nel kernel.
I programmi di test dei thread usano sincronizzazione basata su semafori. Si può tentare di tracciarne l’esecuzione in GDB, per verificare come lavora lo scheduler, cone sono creati i thread, e cosa succede al context-switch. Per far questo, si consiglia di tracciare funzioni quali thread_create thread_fork, thread_yield, …

Osservare, ad esempio, la memoria allocata, lo stack, il context-switch.

Il test tt1 stampa i numeri da 0 a 7 ad ogni loop del thread, tt2 stampa solo ad inizio e fine dei thread (serve a dimostrare che lo scheduler non genera starvation). I threads sono avviati e girano per un po’ di iterazioni. Provare a modificare il comportamento. Il test tt3 utilizza semafori.

Il sorgente di avvio dei test si trova in menu.c

Per fare debug di programmi con thread

Siccome la funzione thread_yield viene chiamata a intervalli random, per generale (e farne il debug) sequenze di esecuzione ripetibili si consiglia di usare un seme per inizializzazione fissa del generatore di numeri casuali (direttiva “random” in sys161.conf). Passare ad autoseed sono quando tutto funziona.